package main

import (
	"fmt"
	"image"
	"image/color"
)

func main() {
	//a := 56
	//fmt.Println(a)

	//sum, _ := getSumAndSub(10, 5)
	//_, sub := getSumAndSub(1000, 8)
	//fmt.Println(sum, sub)

	//night()

	//exchange(1, 2)
	//graph()

	//s()
	slice()

	pointer()
}

func pointer() {
	// 指针 --类型指针 和 切片
	// ptr := &v v的类型为T
	// v 代表被取地址的变量，被取地址的v使用ptr变量进行接收，ptr的类型就为“*T”，称作T的指针类型"*"代表指针
	// 每个变量都拥有地址，指针的值就是地址
	var cat int = 2
	var str string = "banana"
	// 对字符串取地址，pter类型为*string
	var house = "hello go pointer"
	pter := &house
	fmt.Printf("%p\t%T\n", pter, pter)

	// 对指针进行取值操作,指针取值后就是指向变量的值
	value := *pter // 指针访问值
	fmt.Printf("value typr:%T\t valur:%s\n", value, value)
	fmt.Printf("%p,%p", &cat, &str)

}

func slice() {
	// 切片是基于数组的，表示一个拥有相同类型元素的可变长度的序列 var name []T
	var a1 []int

	// a2 := []int{10,100,200}

	a1 = append(a1, 23, 34, 45)

	a := make([]int, 3)
	a[0] = 1
	a[2] = 2
	a[2] = 3

	fmt.Printf("cap[切片的容量 %d] len[切片的长度 %d]slice=%v\n", cap(a1), len(a1), a1)
	str := "hello world we will go"
	// 字符串切片
	println(str[6:])

	// for循环切片
	for i := range a1 {
		//  fmt.Sprintf 转成string
		st := fmt.Sprintf("a1 -->%d", a1[i])
		fmt.Println(st)
	}

	for i := 0; i < len(a1); i++ {
		//ints := append(a1, a1[i])
		fmt.Println(a1[i])
	}

}
func s() {
	// 反引号，嵌入一个多行字符串
	// ``中的代码不会被编译器识别，知识作为字符串的一部分
	const str = `这是一个
		字符串
	第三行 \r\n
`
	strr := "\" " + str + "\""
	fmt.Println(strr)

	var a byte = 'a'
	fmt.Printf("%d \t %T \n", a, a)
	var b rune = '我'
	fmt.Printf("%d\t%T\n", b, b)

}
func exchange(a int, b int) {
	// a:=100
	// b:=23
	b, a = a, b
	fmt.Printf("%d , %d", a, b)
	fmt.Println()
}

func getSumAndSub(n1 int, n2 int) (int, int) {
	sum := n1 + n2
	sub := n1 - n2
	return sum, sub
}

func night() {
	for i := 1; i <= 9; i++ {
		for j := 1; j <= i; j++ {
			fmt.Printf("%d * %d = %d\t", j, i, j*i)
		}
		fmt.Println()
	}

}

func graph() {
	// 图片大小
	const size = 300
	// 创建灰度图
	pic := image.NewGray(image.Rect(0, 0, size, size))

	for x := 0; x < size; x++ {
		for y := 0; y < size; y++ {
			pic.SetGray(x, y, color.Gray{255})
		}
	}
}
